﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WpfApplication2.Helpers;
using System.Windows.Input;
using WpfApplication2.UserControls;
using System.Windows.Controls;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.Views.Afiliado;
using WpfApplication2.Views.TipoOrden;
using WpfApplication2.Views.TipoPlan;
using WpfApplication2.UserControls;
using WpfApplication2.Views;

namespace WpfApplication2.ViewModels.TipoPlan
{
    public class TipoPlanDetalleViewModel : ViewModel
    {
        public TipoPlanDTO TipoPlan
        {
            get
            {
                return tipoPlan;
            }
            set
            {
                if (tipoPlan != value)
                {
                    tipoPlan = value;
                    RaisePropertyChanged("TipoPlan");
                }
            }
        }
        private TipoPlanDTO tipoPlan;

        public Instancias Instancias { get; set; }
        public Visibility PanelDatosVisible
        {
            get
            {
                return panelDatosVisible;
            }
            set
            {
                if (panelDatosVisible != value)
                {
                    panelDatosVisible = value;
                    RaisePropertyChanged("PanelDatosVisible");
                }
            }
        }
        private Visibility panelDatosVisible;
        public Service1SoapClient WS;
        #region properties

        public String NombreAux
        {
            get
            {
                return nombreAux;
            }
            set
            {
                if (nombreAux != value)
                {
                    nombreAux = value;
                    RaisePropertyChanged("NombreAux");
                }
            }
        }
        private String nombreAux;

        public Frame ContainerFrame
        {
            get;
            set;
        }
        public ModalDialog modalDialog
        {
            get;
            set;
        }

        public PropertyElement Nombre
        {
            get
            {
                return nombre;
            }
            set
            {
                if (nombre != value)
                {
                    nombre = value;
                    RaisePropertyChanged("Nombre");
                }
            }
        }
        private PropertyElement nombre;
        public PropertyElement Descripcion
        {
            get
            {
                return descripcion;
            }
            set
            {
                if (descripcion != value)
                {
                    descripcion = value;
                    RaisePropertyChanged("Descripcion");
                }
            }
        }
        private PropertyElement descripcion;
        public PropertyElement PrecioTPlan
        {
            get
            {
                return precioTPlan;
            }
            set
            {
                if (precioTPlan != value)
                {
                    precioTPlan = value;
                    RaisePropertyChanged("PrecioTPlan");
                }
            }
        }
        private PropertyElement precioTPlan;

        public PropertyElement Nombre1
        {
            get
            {
                return nombre1;
            }
            set
            {
                if (nombre1 != value)
                {
                    nombre1 = value;
                    RaisePropertyChanged("Nombre1");
                }
            }
        }
        private PropertyElement nombre1;
        public PropertyElement Descripcion1
        {
            get
            {
                return descripcion1;
            }
            set
            {
                if (descripcion1 != value)
                {
                    descripcion1 = value;
                    RaisePropertyChanged("Descripcion1");
                }
            }
        }
        private PropertyElement descripcion1;
        public PropertyElement PrecioTPlan1
        {
            get
            {
                return precioTPlan1;
            }
            set
            {
                if (precioTPlan1 != value)
                {
                    precioTPlan1 = value;
                    RaisePropertyChanged("PrecioTPlan1");
                }
            }
        }
        private PropertyElement precioTPlan1;

        public TipoPlanDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private TipoPlanDTO[] resultados;

        public TipoPlanDTO TipoPlan1
        {
            get
            {
                return tipoPlan1;
            }
            set
            {
                if (tipoPlan1 != value)
                {
                    tipoPlan1 = value;
                    RaisePropertyChanged("TipoPlan1");
                }
            }
        }
        private TipoPlanDTO tipoPlan1;

        public TipoPlanDTO PlanAux
        {
            get
            {
                return planAux;
            }
            set
            {
                if (planAux != value)
                {
                    planAux = value;
                    RaisePropertyChanged("PlanAux");
                }
            }
        }
        private TipoPlanDTO planAux;


        #endregion 
      
        
        public TipoPlanDetalleViewModel(Instancias instancias, TipoPlanDTO tipoPlanIngresado)
        {
            WS = new Service1SoapClient();
            Instancias = instancias;
            TipoPlan = tipoPlanIngresado;
            InicializarPropiedades();

        }
        private void InicializarPropiedades()
        {
            PanelDatosVisible = Visibility.Collapsed;

            //Inicializacion de propiedades:
            Nombre = new PropertyElement() { Foreground = "Black", Name = "Nombre", Value= TipoPlan.Nombre};
            Descripcion = new PropertyElement() { Foreground = "Black", Name = "Descripcion" , Value= TipoPlan.Descripcion};
            PrecioTPlan = new PropertyElement() { Foreground = "Black", Name = "PrecioTPlan", Value=TipoPlan.PrecioTPlan };


            //Seleccionar las propiedades que se quieren validar
            ValidationList = new List<PropertyElement>();
            Nombre.Validations.Add(ValidationType.Requerido);
            Descripcion.Validations.Add(ValidationType.Requerido);
            PrecioTPlan.Validations.Add(ValidationType.Requerido);
            ValidationList.Add(Nombre);
            ValidationList.Add(Descripcion);
            ValidationList.Add(PrecioTPlan);
        }
        private bool CanExecute()
        {
            return true;
        }
        private DelegateCommand editarPlan;
        public ICommand EditarPlan
        {
            get
            {
                if (editarPlan == null)
                {
                    editarPlan = new DelegateCommand(EditarTipoPlan, CanExecute);
                }
                return editarPlan;
            }
        }

        public void EditarTipoPlan()
        {
            if (TipoPlan != null)
            {
                Instancias.FrameContent.Content = new EditaPlan(Instancias, TipoPlan);
            }
            else 
            {
                Instancias.ModalDialog.ShowHandlerDialog(string.Format("Seleccione el Plan a editar"));
            }

        }


        //****************************************

        private DelegateCommand eliminarPlan;
        public ICommand EliminarPlan
        {
            get
            {
                if (eliminarPlan == null)
                {
                    eliminarPlan = new DelegateCommand(EliminarTPlan, CanExecute);
                }
                return eliminarPlan;
            }
        }

        public void EliminarTPlan()
        {
            bool planflag = true;
            if (TipoPlan != null)
            {
                planflag = WS.EliminarPlan(TipoPlan.Id);
                if (planflag)
                {
                    Instancias.ModalDialog.ShowHandlerDialog(string.Format("Se elimino correctamente")); 
                    Instancias.FrameContent.Content = new Home(); 

                }
            }
            else 
            {
                Instancias.ModalDialog.ShowHandlerDialog(string.Format("Erros no esperado"));
            }

        }


    }

}
